package cn.itcast.web.controller.company;

        import cn.itcast.domain.company.Company;
        import cn.itcast.service.company.CompanyService;
        import cn.itcast.web.controller.BaseController;
        import com.alibaba.dubbo.config.annotation.Reference;
        import com.github.pagehelper.PageInfo;
        import org.apache.shiro.authz.annotation.RequiresPermissions;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.stereotype.Controller;
        import org.springframework.util.StringUtils;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestParam;
        import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/company")
public class CompanyController extends BaseController {

    @Reference
    private CompanyService companyService;

    @RequestMapping(value = "/list",name = "企业列表")
    @RequiresPermissions("企业管理")
    public  String list(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "5") int pageSize){
//        //硬编码方式实现权限管理
//        Subject subject = SecurityUtils.getSubject();
//        //发出了企业管理的权限检查请求
//        subject.checkPermission("企业管理");
//        List<Company> list = companyService.findAll();
        PageInfo<Company> pageInfo = companyService.findByPage(pageNum, pageSize);
        request.setAttribute("pageInfo",pageInfo);
        //把企业存储到域中
//        request.setAttribute("list",list);
        return "company/company-list";  // 完整路径： /pages/company/company-list.jsp
    }

    /*
       定义日期类型转换器的步骤：
            1. 自定义一个类实现Converter接口
            2. 实现接口，把字符串转换为Date类型
            3. 创建自定义类型转换器的对象
            4. 把自定义类型转换器交给转换器工厂
            5. 再把类型转换器工厂交给注解驱动去启动
     */

    /**
     * url:/company/toAdd.do
     * 作用：进入添加页面
     * 参数：无
     */
    @RequestMapping("/toAdd")
    public String toAdd(){
        return "company/company-add";
    }
    /**
     * url:/company/edit.do
     * 作用：新增企业 更新企业
     * 参数：企业对象
     * 返回值：企业列表页面
     */
    @RequestMapping("/edit")
    public String edit(Company company){
        if (StringUtils.isEmpty(company.getId())){
            //没有带id过来，新增操作
            companyService.save(company);
        }else {
            //更新 update xx set xx=xx where id=xx 更新一定要带id过来
            companyService.update(company);
        }
        //普通字符串是会经过视图解析器
        //更新或者新增成功都要回到企业列表页面
        return "redirect:/company/list.do";//添加redirect开头的返回值则不会经过视图解析器
    }

    /**
     * url:.company/toUpdate.do?id=${item.id}
     * 作用:进入企业修改页面
     * 参数：企业id
     * 返回值：企业更新页面
     */
    @RequestMapping("/toUpdate")
    public ModelAndView toUpdate(String id){
        ModelAndView mv=new ModelAndView();
        //根据id查找到页面
      Company company=companyService.findById(id);
      //保存到域
        mv.addObject("company",company);
        //设置返回的jsp页面
        mv.setViewName("company/company-update");
        return mv;
    }

    /**
     * url:/company/delete.do?id="+id
     * 作用：删除企业
     * 参数：企业id
     * 返回值：企业列表
     */
    @RequestMapping("/delete")
    public String delete(String id){
        companyService.delete(id);
        return "redirect:/company/list.do";
    }


}
